I2C is a type of serial computer bus that can be used to attach low-speed peripherals to a motherboard, embedded system, cell phone, or other electronic device. In the context of a bus, a master is a device which can initiate transactions over the bus and a slave is a device which is connected to the bus but cannot initiate any transactions over it (and hence only communicates over the bus in response to a master). Typically I2C is used on a printed circuit board (PCB) to connect a limited number of slave devices to a single master microcontroller. Nonetheless, the I2C protocol does allow for multiple masters, i.e. multiple devices which can each initiate transactions over the bus (such as to provide an instruction or information to another device, or read information from another device). It is even possible that every participant is a master. Further, I2C can be used to connect components via cables, rather than just within one PCB.
An I2C-based system is typically built up using generic building blocks. In the case where I2C is used on a PCB to connect a limited number of “dumb” functional blocks to one “intelligent” (micro) controller, the system setup and availability of addresses is known beforehand.